Ep25 看過小檔案帶來的麻煩:資料總量不大,Spark 卻忙著啟動一堆短 task。如果這些檔案暫時不能重寫,有沒有辦法讓一個 task 多讀幾個,少付一點啟...
大表 join 小表時,我很容易直覺認為:「小表才幾千筆,直接 broadcast 就好了吧?」但 Spark 有時還是選擇 shuffle join。這時要調...
有時候一個 Stage 已經完成大部分工作,只剩一個 task 遲遲不結束,整個 job 就只能等它。Ep23 看過其中一種原因:資料集中在少數 key,讓某個...
Spark 做 groupBy、join 或 distinct 時,常會先把資料重新分流,再交給下一批 tasks 處理。這批工作要切成幾份,很像把一箱貨分給同...
看到 Spark UI 的 GC time、Memory Spill 或 Disk Spill,很容易直接得到「Executor memory 不夠,所以加大...
前一篇我從 join 看到 shuffle 如何增加 Stages 與 tasks。這次沒有 join、沒有 skew,也沒有昂貴的 UDF;我只把同一份資料寫...
資料工程裡很常見的模式是:大量 event、order 或 impression records,要依一張較小的產品、使用者或規則表補上欄位。程式看起來只是一個...
Ep22 讓我先用 Spark UI 將「job 很慢」拆成 Job、Stage、task 與 Executor 層次。當我在 Tasks table 發現少數...
工作中的 Spark job 一旦跑得比平常久,很容易立刻想到 Executor memory、Executor 數量或某個 Spark 設定。這些猜測缺少證據...
在 Ep20 中我們認識了 Yarn 平台,ResourceManager、ApplicationMaster、NodeManager 與 container...
Ep19 把 Standalone、YARN 與 Kubernetes 放進同一張地圖後,我知道 YARN 能替 Spark 配置資源;這篇文章我們要進一步了解...
在真實的大型資料場景裡,許多 applications、團隊與排程工作會同時競爭 CPU、memory 與機器。透過單一 Standalone cluster...
Ep15 到 Ep17 把 Standalone cluster 裡的角色、task 與資料位置拆開觀察。到這裡,其實還缺少一個真正會影響 production...
Ep15 先把 Master、Worker、Driver、Executor 放回同一張 cluster 地圖;Ep16 再從 spark-submit 出發,看...
Ep15 建立了 Spark Standalone cluster,也確認 Master、Worker、Driver 與 Executor 的位置。這一集沿用同...
前面幾集我都在筆電的 local mode 跑 Spark。程式能執行、Spark UI 也能看見 Job、Stage 與 Task,但是進入正式工作的叢集環境...
上一集看完 Parquet 的 row group、column chunk 與 footer 後,我想接著深入了解一個更實際的問題:當我只查兩個欄位、只要某一...
Ep12 讓我理解 Iceberg 如何管理一張 table 的 schema、snapshot 與 data files;這次我想再往下一層追問:同一筆 ev...
上一集我追著 Hive Metastore 看 table name、schema 與 location 如何跨 SparkSession 被重新找到,也看見...
上一集,我用一個簡單的 table 走過整個資料存儲的生態系,了解整體架構的全局樣貌。今天我想要深入了解 Metastore 管理資料表的生命週期,當 Spar...
前幾集我一路追 Spark 的 Job、Stage、task、shuffle 和輸出檔案。當資料寫完後,我平常很自然地會在下一個 job 裡寫下 spark.t...
前幾集我一直用 Spark UI 追著 Job、Stage、task 與 shuffle 跑。這讓我開始注意到另一種很常見、卻不一定一眼看得出的浪費:明明是同一...
資料處理完成後,Spark 的工作還沒有結束。下游不會讀取「上一個 stage 有幾個 task」,它讀取的是 Parquet 檔案。檔案太小,會多出開檔、me...
上一集,我從輸入資料看見:來源有幾個 partition,沒有 shuffle 的 stage 通常就有幾個 task。不過日常寫 DataFrame pipe...
上一集,我知道 wide transformation 會透過 shuffle 切出新的 stage。接著我想追一個更具體的問題:同一個 stage 裡,Spa...
前幾集裡,我已經知道 DataFrame 的 transformation 會先累積,等 action 出現才執行;也在 Spark UI 看過 Job、Sta...
前幾集我已經在筆電上跑起 Spark,也在 Spark UI 裡看過 Job、Stage 和 Task。不過我還是常常把幾個名詞混在一起:Driver、JVM、...
上一集,我知道 action 出現後,Spark 才會開始規劃並執行工作。不過「切成 stage」、「分配 task」還是有點抽象;我想親眼看看它們到底長什麼樣...
上一集,我終於在自己的筆電上啟動了 Spark。不過接著又有一個更貼近日常開發的問題:明明我已經連續寫了好幾個 DataFrame 操作,為什麼總是到 show...
前言 大家好,我是 Jeffery,我是一名 Junior MLE!我的日常工作總是離不開應用 PySpark 建立與維運 Data ETL pipeline...